/**
 * 环境变量配置工具
 * 提供类型安全的环境变量访问和验证
 */
/**
 * 环境变量配置对象
 */
import type { EnvConfig } from './env.d'
export const env: EnvConfig = {
  // 应用基础配置
  APP_TITLE: getEnvValue('VITE_APP_TITLE', '调度系统'),
  APP_VERSION: getEnvValue('VITE_APP_VERSION', '1.0.0'),
  APP_DESCRIPTION: getEnvValue('VITE_APP_DESCRIPTION', '高效、智能的调度管理平台'),
  APP_ENV: getEnvValue('VITE_APP_ENV', 'development'),

  // API 配置
  API_BASE_URL: getEnvValue('VITE_API_BASE_URL', 'http://localhost:8080'),
  API_TIMEOUT: getEnvValue('VITE_API_TIMEOUT', 10000),
  API_VERSION: getEnvValue('VITE_API_VERSION', 'v1'),
  API_CACHE_ENABLED: getEnvValue('VITE_API_CACHE_ENABLED', true),
  
  // 功能开关
  ENABLE_DEBUG: getEnvValue('VITE_ENABLE_DEBUG', false),
  ENABLE_ANALYTICS: getEnvValue('VITE_ENABLE_ANALYTICS', false),
  ENABLE_ERROR_MONITORING: getEnvValue('VITE_ENABLE_ERROR_MONITORING', false),
  ENABLE_PERFORMANCE_MONITORING: getEnvValue('VITE_ENABLE_PERFORMANCE_MONITORING', false),
  
  // 第三方服务配置
  GOOGLE_MAPS_API_KEY: getEnvValue('VITE_GOOGLE_MAPS_API_KEY', ''),
  SENTRY_DSN: getEnvValue('VITE_SENTRY_DSN', ''),
  BAIDU_ANALYTICS_ID: getEnvValue('VITE_BAIDU_ANALYTICS_ID', ''),
  UMENG_ANALYTICS_ID: getEnvValue('VITE_UMENG_ANALYTICS_ID', ''),
  
  // 业务配置
  DEFAULT_LOCALE: getEnvValue('VITE_DEFAULT_LOCALE', 'zh-CN'),
  SUPPORTED_LOCALES: getEnvValue('VITE_SUPPORTED_LOCALES', ['zh-CN', 'en-US']),
  DEFAULT_TIMEZONE: getEnvValue('VITE_DEFAULT_TIMEZONE', 'Asia/Shanghai'),
  DEFAULT_PAGE_SIZE: getEnvValue('VITE_DEFAULT_PAGE_SIZE', 20),
  MAX_PAGE_SIZE: getEnvValue('VITE_MAX_PAGE_SIZE', 100),
  MAX_FILE_SIZE: getEnvValue('VITE_MAX_FILE_SIZE', 10485760),
  ALLOWED_FILE_TYPES: getEnvValue('VITE_ALLOWED_FILE_TYPES', ['image/jpeg', 'image/png', 'image/gif', 'application/pdf']),
  
  // 开发配置
  HMR_ENABLED: getEnvValue('VITE_HMR_ENABLED', false),
  SOURCE_MAP_ENABLED: getEnvValue('VITE_SOURCE_MAP_ENABLED', false),
  ESLINT_ENABLED: getEnvValue('VITE_ESLINT_ENABLED', false),
  TYPE_CHECK_ENABLED: getEnvValue('VITE_TYPE_CHECK_ENABLED', false),
  
  // 模拟数据配置
  MOCK_ENABLED: getEnvValue('VITE_MOCK_ENABLED', false),
  MOCK_DELAY: getEnvValue('VITE_MOCK_DELAY', 0),
  
  // 日志配置
  LOG_LEVEL: getEnvValue('VITE_LOG_LEVEL', 'info'),
  CONSOLE_LOG_ENABLED: getEnvValue('VITE_CONSOLE_LOG_ENABLED', false),
  
  // CDN 配置
  CDN_URL: getEnvValue('VITE_CDN_URL', ''),
  ASSETS_PATH: getEnvValue('VITE_ASSETS_PATH', '/assets/'),
  
  // 缓存配置
  CACHE_ENABLED: getEnvValue('VITE_CACHE_ENABLED', false),
  CACHE_DURATION: getEnvValue('VITE_CACHE_DURATION', 3600),
  
  // 测试配置
  TEST_MODE: getEnvValue('VITE_TEST_MODE', false),
  TEST_USER_ID: getEnvValue('VITE_TEST_USER_ID', '')
}

/**
 * 获取环境变量值
 * @param key 环境变量键名
 * @param defaultValue 默认值
 * @returns 环境变量值
 */
function getEnvValue<T>(key: string, defaultValue: T): T {
  const value = import.meta.env[key]
  if (value === undefined) {
    return defaultValue
  }
  
  // 根据默认值类型进行转换
  if (typeof defaultValue === 'boolean') {
    return (value === 'true' || value === '1') as T
  }
  
  if (typeof defaultValue === 'number') {
    return Number(value) as T
  }
  
  if (Array.isArray(defaultValue)) {
    return value.split(',') as T
  }
  
  return value as T
}

/**
 * 环境变量验证
 * @returns 验证结果
 */
export function validateEnv(): { isValid: boolean; errors: string[] } {
  const errors: string[] = []
  
  // 验证必需的配置
  if (!env.API_BASE_URL) {
    errors.push('API_BASE_URL 是必需的配置')
  }
  
  if (env.APP_ENV === 'production' && !env.SENTRY_DSN) {
    errors.push('生产环境需要配置 SENTRY_DSN')
  }
  
  if (env.ENABLE_ANALYTICS && !env.BAIDU_ANALYTICS_ID && !env.UMENG_ANALYTICS_ID) {
    errors.push('启用数据分析时需要配置统计 ID')
  }
  
  return {
    isValid: errors.length === 0,
    errors
  }
}

/**
 * 获取当前环境信息
 * @returns 环境信息对象
 */
export function getEnvironmentInfo() {
  return {
    mode: import.meta.env.MODE,
    dev: import.meta.env.DEV,
    prod: import.meta.env.PROD,
    ssr: import.meta.env.SSR,
    appEnv: env.APP_ENV,
    appTitle: env.APP_TITLE,
    appVersion: env.APP_VERSION
  }
}

/**
 * 检查是否为开发环境
 * @returns 是否为开发环境
 */
export function isDevelopment(): boolean {
  return env.APP_ENV === 'development'
}

/**
 * 检查是否为生产环境
 * @returns 是否为生产环境
 */
export function isProduction(): boolean {
  return env.APP_ENV === 'production'
}

/**
 * 检查是否为测试环境
 * @returns 是否为测试环境
 */
export function isStaging(): boolean {
  return env.APP_ENV === 'staging'
}

/**
 * 获取 API 完整 URL
 * @param path API 路径
 * @returns 完整的 API URL
 */
export function getApiUrl(path: string): string {
  const baseUrl = env.API_BASE_URL.replace(/\/$/, '')
  const apiPath = path.startsWith('/') ? path : `/${path}`
  return `${baseUrl}${apiPath}`
}

/**
 * 获取 CDN 资源 URL
 * @param path 资源路径
 * @returns 完整的 CDN URL
 */
export function getCdnUrl(path: string): string {
  if (!env.CDN_URL) {
    return path
  }
  const cdnUrl = env.CDN_URL.replace(/\/$/, '')
  const assetPath = path.startsWith('/') ? path : `/${path}`
  return `${cdnUrl}${assetPath}`
}

export default env 